//package com.solome.util;
//
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.Iterator;
//import java.util.Set;
//
//import com.badlogic.gdx.Gdx;
//import com.badlogic.gdx.files.FileHandle;
//import com.badlogic.gdx.graphics.Color;
//import com.badlogic.gdx.graphics.g2d.BitmapFont;
//import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
//import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter;
//import com.badlogic.gdx.utils.CharArray;
//import com.badlogic.gdx.utils.ObjectMap;
//import com.badlogic.gdx.utils.StringBuilder;
//
///**
// * 
// * 
// * 
// * @author soells
// *
// */
//public class FontFactoryOld {
//
//	// 增加一个记忆列表
//	class FontDictionary {
//		BitmapFont bitmapFont;
//		StringBuilder builder = new StringBuilder();
//		int size;
//
//		public BitmapFont getBitmapFont() {
//			return bitmapFont;
//		}
//
//		public void setBitmapFont(BitmapFont bitmapFont) {
//			this.bitmapFont = bitmapFont;
//		}
//
//		public StringBuilder getBuilder() {
//			return builder;
//		}
//
//		public void setBuilder(StringBuilder builder) {
//			this.builder = builder;
//		}
//
//		public int getSize() {
//			return size;
//		}
//
//		public void setSize(int size) {
//			this.size = size;
//		}
//	}
//
//	/**
//	 * 统一处理BitmapFont
//	 * 
//	 * @author solles
//	 *
//	 */
//	class FontLoadInvoke extends InvokeFactory.Invokable {
//		long maxTime = 0;
//		long minTime = 0;
//		/** 用于接受 */
//		ObjectMap<String, FontDictionary> insertFontDictionary = new ObjectMap<String, FontDictionary>();
//
//		@Override
//		public void invoke() throws Exception {
//			long start = System.currentTimeMillis();
//			boolean isPrint = insertFontDictionary.size != 0;
//			for (ObjectMap.Entry<String, FontDictionary> asset : insertFontDictionary
//					.entries()) {
//				String key = asset.key;
//				FontDictionary dictionary = asset.value;
//				StringBuilder builderCharSequence = dictionary.getBuilder();
//				FreeTypeFontGenerator generator = generators.get(cur_font_name);
//				if (generator == null) {
//					FileHandle handle = Gdx.files.internal(cur_font_name);
//					generator = new FreeTypeFontGenerator(handle);
//					generators.put(cur_font_name, generator);
//				}
//				FontDictionary fontCache = fontDictionary.get(key);
//				if (fontCache != null) {
//					if (include(builderCharSequence.toString(), fontCache
//							.getBuilder().toString())) {
//						insertFontDictionary.remove(asset.key);
//						return;
//					}
//					builderCharSequence.append(fontCache.getBuilder()
//							.toString());
//				}
//
//				FreeTypeFontParameter parameter = new FreeTypeFontParameter();
//				parameter.characters = removerepeatedchar2(builderCharSequence
//						.toString()
//						+ FreeTypeFontGenerator.DEFAULT_CHARS
//						+ ToSBC(FreeTypeFontGenerator.DEFAULT_CHARS));
//				parameter.size = dictionary.getSize();
//				BitmapFont bitmapFont = generator.generateFont(parameter);
//				if (fontCache != null) {
//					fontCache.getBitmapFont().dispose();
//					fontCache.setBitmapFont(bitmapFont);
//					fontCache.setSize(dictionary.getSize());
//					StringBuilder builder = fontCache.getBuilder();
//					builder.delete(0, builder.length);
//					builder.append(parameter.characters);
//					fontDictionary.put(key, fontCache);// .put(key, fontCache);
//				} else {
//					fontCache = new FontDictionary();
//					fontCache.setBitmapFont(bitmapFont);
//					fontCache.setSize(dictionary.getSize());
//					fontCache.getBuilder().append(parameter.characters);
//					fontDictionary.put(key, fontCache);
//				}
//				insertFontDictionary.remove(asset.key);
//			}
//			long end = System.currentTimeMillis();
//			if (maxTime == 0 || maxTime < (end - start)) {
//				maxTime = (end - start);
//			}
//			if (minTime == 0 || (end - start) < minTime) {
//				minTime = (end - start);
//			}
//			if (isPrint)
//				System.err.println("BitmapFont TTF文字最高耗时" + (maxTime)
//						+ "毫秒,最低耗时" + (minTime) + "毫秒");
//		}
//	}
//
//	/** 记忆中的 */
//	ObjectMap<String, FontDictionary> fontDictionary = new ObjectMap<String, FontDictionary>();
//
//	ObjectMap<String, FreeTypeFontGenerator> generators = new ObjectMap<String, FreeTypeFontGenerator>();
//
//	private final FontLoadInvoke fontLoadInvoke = new FontLoadInvoke();
//
//	public final String SPANISH_FONT_NAME = "fonts/Marker Felt.ttf";
//	public final String RUSSIAN_FONT_NAME = "fonts/FZLBJW--GB1-0.ttf";
//
//	public  String cur_font_name = RUSSIAN_FONT_NAME;
//
//	public float FIRST_FONT_SIZE = 0f;
//
//	private static FontFactoryOld instance = null;// = new FontFactory();
//
//	private FontFactoryOld() {
//		FontDictionary factory = new FontDictionary();
//		// StringBuilder builder = new StringBuilder();
//		factory.getBuilder().append("简单测试" + "，。“”！【】 、；：《》？");
//		factory.setSize(20);
//		this.fontLoadInvoke.insertFontDictionary.put("20", factory);
//
//		try {
//			this.fontLoadInvoke.invoke();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//		InvokeFactory.getInstance().addInvok(fontLoadInvoke);
//	}
//
//	public static synchronized FontFactoryOld getInstance() {
//		if (instance == null) {
//			instance = new FontFactoryOld();
//		}
//		return instance;
//	}
//
//	public void initialize() {
//	}
//
//	public void initialize(String ttf) {
//	}
//
//	/**
//	 * 字符串对比
//	 * 
//	 * @param font
//	 * @return
//	 */
//	public boolean include(String font, String font2) {
//		CharArray array = new CharArray(font2.toCharArray());
//		for (char c : font.toCharArray()) {
//			if (!array.contains(c)) {
//				System.err.println(c);
//				return false;
//			}
//		}
//		return true;
//	}
//
//	public float getFontScale(float size) {
//		return size / FIRST_FONT_SIZE;
//	}
//
//	/**
//	 * 
//	 * @param font
//	 * @param fontSize
//	 * @param color
//	 *            exture.setFilter(TextureFilter.Linear,TextureFilter.Linear);
//	 * @return
//	 */
//	public void getBitmapFont(CharSequence font, int fontSize, Color color) {
//		if (font == null
//				|| (font != null && (font.length() <= 0 || font.equals(""))))
//			throw new IllegalArgumentException("font cannot be null or \"\".");
//		if (FIRST_FONT_SIZE == 0)
//			FIRST_FONT_SIZE = fontSize;
//		String key = "" + fontSize;
//
//		FontDictionary dictionary = this.fontLoadInvoke.insertFontDictionary
//				.get(key);
//		if (dictionary == null) {
//			dictionary = new FontDictionary();
//			dictionary.getBuilder().append(font);
//			dictionary.setSize(fontSize);
//			this.fontLoadInvoke.insertFontDictionary.put(key, dictionary);
//		} else {
//			dictionary.getBuilder().append(font);
//		}
//	}
//
//	public String removerepeatedchar(String characters) {
//		if (characters == null)
//			return characters;
//
//		StringBuffer sb = new StringBuffer();
//		int i = 0, len = characters.length();
//		while (i < len) {
//			char c = characters.charAt(i);
//			sb.append(c);
//			i++;
//			while (i < len && characters.charAt(i) == c) {// 这个是如果这两个值相等，
//				i++;
//			}
//		}
//		return sb.toString();
//	}
//
//	public String removerepeatedchar1(String characters) {
//		char[] cs = characters.toCharArray();
//		CharArray array = new CharArray();
//		StringBuilder buffer = new StringBuilder(array.size);
//		for (char c : cs) {
//			if (!array.contains(c)) {
//				array.add(c);
//				buffer.append(c);
//			}
//		}
//		array.clear();
//		return buffer.toString();
//	}
//
//	public String removerepeatedchar2(String characters) {
//		char[] cs = characters.toCharArray();
//		Set<Character> set = new HashSet<Character>();
//		StringBuilder sb = new StringBuilder();
//		for (char c : cs) {
//			if (set.add(c)) {
//				sb.append(c);
//			}
//		}
//		set.clear();
//		return sb.toString();
//	}
//
//	public String removerepeatedchar3(String str) {
//		ArrayList<Character> list = new ArrayList<Character>();
//		for (int i = 0, n = str.length(); i < n; i++) {
//			if (!list.contains(str.charAt(i))) {
//				list.add(str.charAt(i));
//			}
//		}
//
//		@SuppressWarnings("rawtypes")
//		Iterator it = list.iterator();
//		if (!it.hasNext())
//			return "";
//
//		StringBuilder sb = new StringBuilder();
//
//		for (;;) {
//			Character e = (Character) it.next();
//			sb.append(e);
//			if (!it.hasNext())
//				return sb.toString();
//		}
//	}
//
//	public static void main(String[] args) {
//		FontFactoryOld cache = FontFactoryOld.getInstance();
//
//		String msg = "此外，Apple Watch也可能会拉动iPhone的销量，其将促使消费者购买最新款的iPhone，以提升使用体验。例如，iOS 8系统包含健康应用和HealthKit功能，?这一系统要求iPhone不能太旧，苹果希望至少iPhone 5及更新的设备。根据此前消息，Apple Watch将于4月登陆美国?加拿大及部分欧洲国家，也不排除在中国市场首发的可能?，这款手表的起售价为349美元?";
//		long start = System.currentTimeMillis();
//		long end = System.currentTimeMillis();
//		// System.err.println(endMsg + "|" + "耗时 " + (end - start) + " 毫秒..");
//
//		start = System.currentTimeMillis();
//		cache.removerepeatedchar1(msg);
//		end = System.currentTimeMillis();
//		System.err.println(1 + "|" + "耗时 " + (end - start) + " 毫秒..");
//
//		start = System.currentTimeMillis();
//		cache.removerepeatedchar2(msg);
//		end = System.currentTimeMillis();
//		System.err.println(2 + "|" + "耗时 " + (end - start) + " 毫秒..");
//
//		start = System.currentTimeMillis();
//		cache.removerepeatedchar3(msg);
//		end = System.currentTimeMillis();
//		System.err.println(3 + "|" + "耗时 " + (end - start) + " 毫秒..");
//
//	}
//
//	public void draw() {
//
//	}
//
//	/**
//	 * Dispose resources
//	 */
//	public void dispose() {
//		for (FontDictionary dictionary : fontDictionary.values()) {
//			dictionary.getBitmapFont().dispose();
//		}
//		for (FreeTypeFontGenerator generator : generators.values()) {
//			generator.dispose();
//		}
//		this.generators.clear();
//	}
//
//	public BitmapFont getBitmapFont(String key) {
//		if (!fontDictionary.containsKey(key)) {
//			return null;
//		}
//		return fontDictionary.get(key).getBitmapFont();
//	}
//
//	public int fontCacheSzie() {
//		return fontDictionary.size;
//	}
//
//	/**
//	 * 半角转全角
//	 * 
//	 * @param input
//	 *            String.
//	 * @return 全角字符串.
//	 */
//	public String ToSBC(String input) {
//		char c[] = input.toCharArray();
//		for (int i = 0; i < c.length; i++) {
//			if (c[i] == ' ') {
//				c[i] = '\u3000';
//			} else if (c[i] < '\177') {
//				c[i] = (char) (c[i] + 65248);
//
//			}
//		}
//		return new String(c);
//	}
//
//	/**
//	 * 全角转半角
//	 * 
//	 * @param input
//	 *            String.
//	 * @return 半角字符串
//	 */
//	public String ToDBC(String input) {
//
//		char c[] = input.toCharArray();
//		for (int i = 0; i < c.length; i++) {
//			if (c[i] == '\u3000') {
//				c[i] = ' ';
//			} else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
//				c[i] = (char) (c[i] - 65248);
//
//			}
//		}
//		return new String(c);
//	}
// }
